package com.lvy.hczn.transmit.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.common.core.domain.entity.SysUser;
import com.lvy.hczn.front.system.domain.business.GoodsBox;
import com.lvy.hczn.front.system.domain.transmit.SupplierBoxBatchNumber;
import com.lvy.hczn.front.system.domain.transmit.dto.SupplierBoxBatchNumberExport;
import com.lvy.hczn.mq.rocket.ParamInfo;
import com.lvy.hczn.transmit.domain.dto.cteck.BoxNew;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface GoodsBoxService extends IService<GoodsBox> {

    /**
     * 货箱列表查询
     *
     * @param goodsBox
     * @return
     * @author yw
     * @date 2023-05-16 20:33:32
     */
    List<GoodsBox> selectBoxlist(GoodsBox goodsBox);

    /**
     * 新生产的货箱录入
     *
     * @param goodsBox
     * @return
     * @author yw
     * @date 2023-05-16 20:40:55
     */
    int saveData(GoodsBox goodsBox);

    /**
     * 货箱编号批量生成
     *
     * @param prefix
     * @return
     * @author yw
     * @date 2023-05-16 20:44:01
     */
    List<String> generateBoxNo(String prefix);

    /**
     * 调拨/配送单提前录入货箱到仓库
     *
     * @param list
     * @return void
     * @author yw
     * @date 2023-06-25 19:50:37
     */
    void syncToWms(List<GoodsBox> list, String warehouseCode, String topic);

    /**
     * 查询货箱信息
     *
     * @param id 货箱信息主键
     * @return 货箱信息
     */
    GoodsBox selectGoodsBoxById(String id);

    /**
     * 查询货箱信息列表
     *
     * @param goodsBox 货箱信息
     * @return 货箱信息集合
     */
    List<GoodsBox> selectGoodsBoxList(GoodsBox goodsBox);

    /**
     * 新增货箱信息
     *
     * @param goodsBox 货箱信息
     * @return 结果
     */
    int insertGoodsBox(GoodsBox goodsBox);

    /**
     * 修改货箱信息
     *
     * @param goodsBox 货箱信息
     * @return 结果
     */
    int updateGoodsBox(GoodsBox goodsBox);

    /**
     * 批量删除货箱信息
     *
     * @param ids 需要删除的货箱信息主键集合
     * @return 结果
     */
    int deleteGoodsBoxByIds(String ids);

    /**
     * 删除货箱信息信息
     *
     * @param id 货箱信息主键
     * @return 结果
     */
    int deleteGoodsBoxById(String id);

    /**
     * 生成货箱编码时，初始化货箱数据
     *
     * @param exports
     * @param supplierBoxBatchNumber
     * @param sysUser
     * @return void
     * @author yw
     * @date 2023-09-07 19:53:20
     */
    void initGoodsBox(List<SupplierBoxBatchNumberExport> exports, SupplierBoxBatchNumber supplierBoxBatchNumber, SysUser sysUser);

    /**
     * 删除货箱信息信息
     *
     * @param goodsBoxList    用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    String importGoodsBox(List<GoodsBox> goodsBoxList, Boolean isUpdateSupport, String operName, SysUser sysUser, boolean syncToPlatform);

    /**
     * 货箱生产商生产货箱同步
     *
     * @param goodsBoxListCopy
     * @return void
     * @author yw
     * @date 2023-12-16 16:57:21
     */
    void sendNewGoodsBoxInfo(List<GoodsBox> goodsBoxListCopy);

    /**
     * 根据货箱编码查询货箱信息
     *
     * @param request
     * @param goodsBoxParamInfo
     * @return com.lvy.hczn.transmit.domain.dto.cteck.BoxNew>
     * @author yw
     * @date 2023-12-16 17:00:27
     */
    ParamInfo<BoxNew> selectBoxSupplierByBoxCode(HttpServletRequest request, ParamInfo<GoodsBox> goodsBoxParamInfo);
}
